package cn.itcast.web.controller.cargo;

import cn.itcast.domain.cargo.Contract;
import cn.itcast.domain.cargo.ContractExample;
import cn.itcast.domain.system.User;
import cn.itcast.service.cargo.ContractService;
import cn.itcast.web.controller.BaseController;
import com.alibaba.dubbo.config.annotation.Reference;
import com.github.pagehelper.PageInfo;
import org.springframework.stereotype.Controller;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

@Controller
@RequestMapping("/cargo/contract")
public class ContractController extends BaseController {

    @Reference
    private ContractService contractService;

    @RequestMapping("/list")
    public String list(@RequestParam(defaultValue = "1") Integer pageNum,
                       @RequestParam(defaultValue = "5") Integer pageSize){


        ContractExample contractExample = new ContractExample();

        //今天购销合同我们暂时不涉及任何的条件，明天我再做细粒度权限控制
        //根据购销合同的创建时间去排序
        contractExample.setOrderByClause("create_time desc");//desc 降序、 asc 升序

        ContractExample.Criteria criteria = contractExample.createCriteria();

        //购销合同细粒度的权限控制
        //获取当前登陆者的等级
        Integer degree = getLoginUser().getDegree();

        if (degree==4){
            System.err.println("检测到是普通员工");
            //普通员工
            criteria.andCreateByEqualTo(getLoginUser().getId());
        }else if (degree==3){
            System.err.println("检测到是部门经理");
            //部门经理
            criteria.andCreateDeptEqualTo(getLoginUser().getDeptId());
        }else if (degree==2){
            System.err.println("检测到是大区经理来查看购销合同");
            User loginUser = getLoginUser();
            PageInfo<Contract> pageInfo = contractService.findPageByDeptId(loginUser.getCompanyId(), loginUser.getDeptId(), pageNum, pageSize);
            request.setAttribute("pageInfo",pageInfo);
            return "cargo/contract/contract-list";

            //大区经理
        }else if (degree==1){
            System.err.println("检测到是系统管理员");
            //系统管理员
            criteria.andCompanyIdEqualTo(getLoginUser().getCompanyId());
        }


        PageInfo<Contract> pageInfo = contractService.findByPage(contractExample, pageNum, pageSize);

        request.setAttribute("pageInfo",pageInfo);

        return "cargo/contract/contract-list";

    }

    @RequestMapping("/toAdd")
    public String toAdd(){

        return "cargo/contract/contract-add";
    }

      /*
    作用：添加购销合同，更新购销合同
    url:  /contract/edit.do
    参数：Contract 购销合同对象信息
    返回值 : 购销合同列表页面
 */

    @RequestMapping("/edit")
    public String edit(Contract contract){
        //购销合同的创建人
        contract.setCreateBy(getLoginUser().getId());

        //购销合同的创建人所属的部门

        contract.setCreateDept(getLoginUser().getDeptId());

        //购销合同的创建人所属的企业id

        contract.setCompanyId(getLoginUserCompanyId());

        //购销合同的创建人所属的企业名称

        contract.setCompanyName(getLoginUserCompanyName());

        if (StringUtils.isEmpty(contract.getId())){//判断一个变量是否为空串,相当于上面的语句

            //添加
            contractService.save(contract);

        }else {
            //更新
            contractService.update(contract);
        }
        return "redirect:/cargo/contract/list.do";  //访问上面的list方法


    }

    /*
         作用 ： 进入更新购销合同的页面
         url :  /contract/toUpdate.do?id=5b810ce0-be2b-4450-9fd3-d0856dd86a5f
        参数 : 购销合同id
        返回值 :contract-update
     */

    @RequestMapping("/toUpdate")
    public String toUpdate(String id){
        //1. 根据购销合同的id查找购销合同

        Contract contract = contractService.findById(id);

        //2. 存储到request域中

        request.setAttribute("contract",contract);

        //3. 请求转发到contract-update页面

        return "cargo/contract/contract-update";

    }


        /*
         作用 ：删除
         url :/contract/delete.do?id=02e1da04-43f8-42e1-a4c2-66e162c6f4a5
        参数 : id 购销合同id
        返回值 : 购销合同列表
     */


    @RequestMapping("/delete")
    public String delete(String id) {

        contractService.delete(id);

        return "redirect:/cargo/contract/list.do";

    }



  /*
         作用 ： 进入查看购销合同详情的页面
         url :  /contract/toUpdate.do?id=5b810ce0-be2b-4450-9fd3-d0856dd86a5f
        参数 : 购销合同id
        返回值 :contract-update
     */

    @RequestMapping("/toView")
    public String toView(String id){
        //1. 根据购销合同的id查找购销合同

        Contract contract = contractService.findById(id);

        //2. 存储到request域中

        request.setAttribute("contract",contract);

        //3. 请求转发到contract-update页面

        return "cargo/contract/contract-view";

    }

    /*
      作用 ： 购销合同提交
      url :  /cargo/contract/submit.do?id=dd63eb3c-6d4e-4a85-9c37-fcfda1998c1d
     参数 : 购销合同id
     返回值 :购销合同列表页面
  */

    @RequestMapping("/submit")
    public String submit(String id){
        //1. 根据购销合同的id查找购销合同

        Contract contract = contractService.findById(id);

        //2.修改购销合同的状态为1，更新购销合同
      contract.setState(1);

      contractService.update(contract);


        return "redirect:/cargo/contract/list.do";

    }

    /*
       作用 ： 购销合同取消
       url :  /cargo/contract/submit.do?id=dd63eb3c-6d4e-4a85-9c37-fcfda1998c1d
      参数 : 购销合同id
      返回值 :购销合同列表页面
    */
    @RequestMapping("/cancel")
    public String cancel(String id){
        //1. 根据购销合同的id查找购销合同

        Contract contract = contractService.findById(id);

        //2.修改购销合同的状态为1，更新购销合同
        contract.setState(0);

        contractService.update(contract);


        return "redirect:/cargo/contract/list.do";

    }





}




















